const express = require('express');
const bodyParser = require('body-parser');
const { db, createUser, initializeDatabase, getAllUsers } = require('./database');
const healthRouter = require('./routes/health');

// 初始化数据库
initializeDatabase();

const app = express();
app.use(bodyParser.json());
app.use('/api', healthRouter);

// POST /api/users 创建新用户
app.post('/api/users', async (req, res) => {
  try {
    // 1. 获取传入的参数
    const userData = req.body;

    // 2. 验证参数的有效性
    if (!userData.nickName || !userData.email) {
      return res.status(400).json({ error: 'nickName 和 email 是必填字段' });
    }

    // 3. 创建用户，将数据插入到数据库
    const newUser = await createUser(userData);

    // 4. 返回结果
    res.status(201).json(newUser);
  } catch (error) {
    // 5. 错误处理
    res.status(500).json({ error: error.message });
  }
});

const PORT = process.env.PORT || 3002;

// 添加根路径路由
app.get('/', async (req, res) => {
  try {
    const users = await getAllUsers();
    console.log('查询结果:', users);
    res.status(200).json(users);
  } catch (error) {
    console.error('根路径查询失败:', error);
    res.status(500).json({ error: '数据库查询失败', details: error.message });
  }
});
// 查询所有用户
app.get('/api/users', async (req, res) => {
  try {
    const users = await getAllUsers();
    res.status(200).json(users);
  } catch (error) {
    console.error('数据库查询失败:', error);
    res.status(500).json({ error: '数据库查询失败', details: error.message });
  }
});

// 临时路由：检查数据库中的数据
app.get('/api/debug/users', async (req, res) => {
  try {
    const users = await getAllUsers();
    console.log('数据库查询结果:', users);
    res.status(200).json(users);
  } catch (error) {
    console.error('数据库查询失败:', error);
    res.status(500).json({ error: '数据库查询失败', details: error.message });
  }
});

// 临时路由：批量插入测试用户数据
app.get('/api/debug/insert-users', async (req, res) => {
  const testUsers = [
    { nickName: '用户1', email: 'user1@example.com' },
    { nickName: '用户2', email: 'user2@example.com' },
    { nickName: '用户3', email: 'user3@example.com' },
  ];

  try {
    for (const user of testUsers) {
      await createUser(user);
    }
    res.status(200).json({ message: '成功插入测试用户数据' });
  } catch (error) {
    console.error('插入用户数据失败:', error);
    res.status(500).json({ error: '插入用户数据失败', details: error.message });
  }
});

app.listen(PORT, () => {
  console.log(`服务器运行在端口 ${PORT}`);
});